package com.cy.store.controller;

import com.cy.store.service.ex.*;
import com.cy.store.util.JSONResult;
import org.springframework.web.bind.annotation.ExceptionHandler;

import javax.servlet.http.HttpSession;
import java.io.NotActiveException;

/**
 * @auther 尚智江
 * @Date 2022/7/17 18:17
 */
// 控制层的基类
public class BaseController {
    /* 操作成功的状态码 */
    public static final int OK = 200;
    // 请求处理方法，这个方法的返回值就是需要传递给前端的数据
    // 自动将异常对象传递给此方法的参数列表上
    // 当前项目中产生了异常，被统一拦截到此方法中，这个方法此时就充当的是请求处理方法，方法的返回值直接给到前端
    @ExceptionHandler(ServiceException.class)//用于统一处理抛出异常
    public JSONResult<Void> handleException(Throwable e){
        JSONResult<Void> result = new JSONResult<>(e);
        if(e instanceof UsernameDuplicatedException) {
            result.setState(4000);
            result.setMessage("用户名被占用");
        }else if (e instanceof UserNotFoundException) {
            result.setState(5001);
            result.setMessage("用户数据不存在异常");
        }else if (e instanceof PasswordNotMatchException){
            result.setState(5002);
            result.setMessage("用户名的密码错误异常");
        }else if (e instanceof InsertException){
            result.setState(5000);
            result.setMessage("注册时产生未知的异常");
        }
        return result;
    }
    /**
     * 获取session对象中的uid
     * @param session  session中的对象
     * @return 当前登录的对象
     * */
    protected final Integer getuidFromSession(HttpSession session){
        return Integer.valueOf(session.getAttribute("uid").toString());
    }
    /**
     * 获取当前登录用户的username
     * @param session session的对象
     * @return 当前登录用户的用户名
     * */
    // 在实现类中重写父类中的toString()
    protected final String getUsernameFromSession(HttpSession session){
        return session.getAttribute("username").toString();
    }
}
